package edu.ycu.aladdin.collector.api;

import edu.ycu.aladdin.collector.api.entity.BaseCrawlerTaskQueue;
import edu.ycu.aladdin.common.NullAble;

/**
 * 爬虫服务.
 *
 * @author <a href="mailto:wangruihuano@gmail.com">王瑞环</a>
 * @since 1.0
 */
public interface CrawlerService<TASK extends BaseCrawlerTaskQueue> {

    /**
     * 创建爬虫
     *
     * @param agentId 不指定agent编号时,将从agent pool中随机获取一个
     * @return 爬虫编号
     */
    String createCrawler(@NullAble String agentId, TASK task);

    /**
     * 指定爬虫线程数量创建爬虫
     *
     * @param agentId   不指定agent编号时,将从agent pool中随机获取一个
     * @param threadNum 线程数
     * @return 爬虫编号
     */
    String createCrawler(@NullAble String agentId, TASK task, int threadNum);

    /**
     * 启动爬虫
     *
     * @param id 爬虫id
     */
    void startCrawler(String id);

    /**
     * 停止爬虫
     *
     * @param id 爬虫id
     */

    void stopCrawler(String id);

    /**
     * 销毁爬虫
     *
     * @param id
     */
    boolean destroyCrawler(String id);
}
